package com.hyts.xmlparser.base.handler.file;

import com.hyts.xmlparser.base.handler.AbstractXmlTransferHandler;

import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Objects;

/**
 * project-name:coffice-toolbox
 * package-name:com.hyts.xmlparser.handler
 * author:Libo/Alex
 * create-date:2019-07-18 9:57
 * email:liboware@gmail.com
 * description:此类主要用于:
 */
public abstract class BaseXmlFileTransferHandler<T> extends AbstractXmlTransferHandler<T> {

    /**
     * 操作服务转换服务器
     * @param param
     * @return
     */
    @Override
    public T transfer(File param) {
        //进行转换流的处理操作
        return (T) getXStream().fromXML(param);
    }

    /**
     * 操作服务转换服务器
     * @param param
     * @param filePath
     */
    @Override
    public void transfer(T param, String filePath) {
        //操作服务转换对象功能
        try (FileOutputStream fileOutputStream = new FileOutputStream(filePath)){
            if(Files.exists(Paths.get(filePath))) {
                getXStream().toXML(fileOutputStream);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 转换操作服务
     * @param param
     * @param param2
     */
    @Override
    public void transfer(T param, File param2) {
        //操作服务是否为空
        try (FileOutputStream fileOutputStream = new FileOutputStream(param2)){
            if(Objects.nonNull(param2) && param2.exists()) {
                getXStream().toXML(fileOutputStream);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 转换参数-path文件目录
     * @param param
     * @param path
     * @return
     */
    @Override
    public void transfer(T param, Path path) {
        //操作服务是否为空
        try (FileOutputStream fileOutputStream = new FileOutputStream(path.toFile())){
            if(Objects.nonNull(path) && Files.exists(path)) {
                getXStream().toXML(fileOutputStream);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}
